home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / bin / py3_compilefiles < prev    next >
Text File  |  2009-10-11  |  4KB  |  118 lines

  1. #! /usr/bin/python3
  2.  
  3. import os
  4. import sys
  5. import py_compile
  6.  
  7. def compile_files(files, ddir=None, force=0, rx=None, quiet=0, ignore=0):
  8.     """Byte-compile all file.
  9.     file:      the file to byte-compile
  10.     ddir:      if given, purported directory name (this is the
  11.                directory name that will show up in error messages)
  12.     force:     if 1, force compilation, even if timestamps are up-to-date
  13.     quiet:     if 1, be quiet during compilation
  14.  
  15.     """
  16.  
  17.     success = 1
  18.     dfile = None
  19.     for fullname in files:
  20.         if rx is not None:
  21.             mo = rx.search(fullname)
  22.             if mo:
  23.                 continue
  24.         if os.path.isdir(fullname):
  25.             continue
  26.         elif not os.path.isfile(fullname):
  27.             print("file does not exist:", fullname)
  28.             success = 0
  29.         elif fullname[-3:] == '.py':
  30.             cfile = fullname + (__debug__ and 'c' or 'o')
  31.             ftime = os.stat(fullname).st_mtime
  32.             try: ctime = os.stat(cfile).st_mtime
  33.             except os.error: ctime = 0
  34.             if (ctime > ftime) and not force: continue
  35.             if not quiet:
  36.                 print('Compiling', fullname, '...')
  37.             try:
  38.                 ok = py_compile.compile(fullname, None, dfile, True)
  39.             except KeyboardInterrupt:
  40.                 raise KeyboardInterrupt
  41.             except py_compile.PyCompileError as err:
  42.                 if quiet:
  43.                     print('Compiling', fullname, '...')
  44.                 print(err.msg)
  45.                 success = 0
  46.             except (MemoryError, SyntaxError) as err:
  47.                 if quiet:
  48.                     print('Compiling', fullname, '...')
  49.                 print(err.msg)
  50.                 success = 0
  51.             except IOError as e:
  52.                 print("Sorry", e)
  53.                 success = 0
  54.             else:
  55.                 if ok == 0:
  56.                     success = 0
  57.     if not success and ignore:
  58.         print("Errors were ignored.")
  59.     return success or ignore
  60.  
  61. def main():
  62.     """Script main program."""
  63.     import getopt
  64.     try:
  65.         opts, args = getopt.getopt(sys.argv[1:], 'lfiqd:x:')
  66.     except getopt.error as msg:
  67.         print(msg)
  68.         print("usage: python compilefiles.py [-f] [-q] [-i] " \
  69.               "[-x regexp] [file ...] [-]")
  70.         print("-f: force rebuild even if timestamps are up-to-date")
  71.         print("-i: ignore errors during byte compilation")
  72.         print("-q: quiet operation")
  73.         print("-x regexp: skip files matching the regular expression regexp")
  74.         print("   the regexp is search for in the full path of the file")
  75.         sys.exit(2)
  76.     ddir = None
  77.     force = 0
  78.     quiet = 0
  79.     ignore = 0
  80.     rx = None
  81.     for o, a in opts:
  82.         if o == '-d': ddir = a
  83.         if o == '-f': force = 1
  84.         if o == '-i': ignore = 1
  85.         if o == '-q': quiet = 1
  86.         if o == '-x':
  87.             import re
  88.             rx = re.compile(a)
  89.     if ddir:
  90.         if len(args) != 1:
  91.             print("-d destdir require exactly one directory argument")
  92.             sys.exit(2)
  93.     success = 1
  94.  
  95.     try:
  96.         files = []
  97.         for arg in args:
  98.             if arg == '-':
  99.                 while 1:
  100.                     line = sys.stdin.readline()
  101.                     if not line:
  102.                         break
  103.                     files.append(line[:-1])
  104.             else:
  105.                 files.append(arg)
  106.         if not files:
  107.             print("py_compilefiles: no files to compile")
  108.         elif not compile_files(files, ddir, force, rx, quiet, ignore):
  109.             success = 0
  110.     except KeyboardInterrupt:
  111.         print("\n[interrupt]")
  112.         success = 0
  113.     return success
  114.  
  115. if __name__ == '__main__':
  116.     exit_status = int(not main())
  117.     sys.exit(exit_status)
  118.